import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1
import ColetorPCP 1.0

import "./components/"
import "./js/utils.js" as Utils

Rectangle {
    id: pesagem
    objectName: "pesagem"
    height: parent.height
    width: parent.width

    property int id_depoperacao
    property int id_depprod
    property int codprod
    property real peso
    property alias produto: productName.text

    property Button botaoPrimeiraPagina

    onVisibleChanged: {
        if (visible == false) {
            pesagem_controller.parar_leitura_balanca();
            header.goBackText = "«  Selecionar Etapa";
        }
    }

    PesagemController {
        id: pesagem_controller

        conf: coletor_pcp.conf

        onSaveSuccess: stackView.pop({immediate: true});
        onSaveError: mostrar_erro(mensagem, severidade);
        onNovaLeitura: atualizarPeso(dados);
    }

    function mostrar_erro(mensagem, severidade) {
        overlay.visible = true;
        overlay.text_visible = false;
        modal_dialog.show(mensagem, [{"text": "Tentar Novamente", "width": 250, "action": close_dialog}], severidade);
        pesagem_controller.iniciar_leitura_balanca();
    }

    // Cria todos os botões das panelas dinamicamente
    function carregarDados() {
        var totalPaginas = getTotalPaginas();

        if (totalPaginas > 0) {
            var color = appSkin.paginatorButtonColor==""?header.color:appSkin.paginatorButtonColor;
            var pressedColor = appSkin.paginatorButtonPressedColor==""?header.color:appSkin.paginatorButtonPressedColor;

            var botoesPaginador = Utils.criarBotoesPaginador(paginador, totalPaginas, selecaoPagina, selecionarPagina, color, pressedColor, appSkin.paginatorButtonTextColor);

            for (var i = 0; i < botoesPaginador.length; i++) {
                var botaoPaginador = botoesPaginador[i];
                var numeroPagina = ~~botaoPaginador.text;
                var panelas = coletor_pcp.get_panelas(numeroPagina);

                var pressedColor = appSkin.buttonPressedColor==""?header.color:appSkin.buttonPressedColor;
                var color = appSkin.buttonColor==""?header.color:appSkin.buttonColor;

                var botoesPanelas = Utils.criarBotoesPanelas(listaPanelas, panelas, selecionarPanela, color, pressedColor, appSkin.buttonTextColor);
                botaoPaginador.data = botoesPanelas;

                if (numeroPagina == 1) {
                    botaoPrimeiraPagina = botaoPaginador;
                }
            }
        }
    }

    function iniciarPesagem(id_depoperacao, id_depprod, produto, codprod, cor) {
        header.goBackText = "«  Selecionar Produto";
        listaPanelas.enabled = false;

        pesagem.color = appSkin.backgroundColor==""?header.color:appSkin.backgroundColor;
        pesagem.id_depoperacao = id_depoperacao;
        pesagem.id_depprod = id_depprod;
        pesagem.produto = produto;
        pesagem.codprod = codprod;

        // Esta linha está servindo apenas para colocar
        // a cor correta do botão quando é clicado
        selecionarPagina(botaoPrimeiraPagina);

        // Inicia a Thread que faz a leitura da balança
        pesagem_controller.iniciar_leitura_balanca();
    }

    // Método que está ligado a "thread" de leitura da balança
    function atualizarPeso(dados) {
        // A destruição dos componentes QML é assincrona, e como a execução deste método está
        // ligada a uma Thread no Python, se faz necessário o teste abaixo para evitar erros
        var habilitar = false;
        if (pesoLabel !== undefined) {
            pesoLabel.text = dados["mensagem"];
            if (dados["peso"] !== undefined) {
                peso = dados["peso"];
                if (peso > 0) {
                    habilitar = true;
                }
            }
        }
        listaPanelas.enabled = habilitar;
    }

    // Ação dos Botões de seleção das Panelas
    function selecionarPanela(button, data) {
        // Esse teste evita que o clique duplo realize duas ações
        if (Stack.status == Stack.Active) {
            var id_deppanela = data.id_deppanela;
            var panela = data.panela;
            var tara = data.tara;
            var codpanela = data.codpanela;

            pesagem_controller.parar_leitura_balanca();
            pesagem_controller.salvar_pesagem(peso, ~~id_depoperacao, ~~id_depprod, ~~codprod, produto,
                                              ~~id_deppanela, ~~codpanela, panela, tara);
        }
    }

    //Ação dos Botões do paginador
    function selecionarPagina(button) {
        // Omite as panelas que estão sendo exibidas
        Utils.omitirOpcoes(listaPanelas);

        // Exibe as panelas da página selecionada
        var color = appSkin.buttonColor==""?header.color:appSkin.buttonColor;
        var pressedColor = appSkin.buttonPressedColor==""?header.color:appSkin.buttonPressedColor;

        Utils.mostrarOpcoes(button.data, color, pressedColor, appSkin.buttonTextColor);
    }

    // Retorna o total de páginas
    function getTotalPaginas() {
        return coletor_pcp.get_total_paginas_panelas();
    }

    ExclusiveGroup { id: selecaoPagina }

    Text {
        id: productName
        text: qsTr("Produto X")
        font.pixelSize: (parent.height + parent.anchors.topMargin) * 0.06
        font.bold: true
        color: "black"
        anchors.top: parent.top
        anchors.topMargin: parent.height * 0.01
        anchors.horizontalCenter: parent.horizontalCenter
    }

    Rectangle {
        id: weightWindow
        height: parent.height * 0.3
        color: "transparent"
        anchors.top: productName.bottom
        anchors.topMargin: parent.height * 0.01
        anchors.left: parent.left
        anchors.leftMargin: parent.width * 0.01
        anchors.right: parent.right
        anchors.rightMargin: parent.width * 0.01
        border.color: header.color
        border.width: parent.width * 0.005
        radius: border.width * 3

        Text {
            text: qsTr("PESO")
            font.pixelSize: parent.height * 0.15
            anchors.top: parent.top
            anchors.topMargin: parent.height * 0.06
            anchors.horizontalCenter: parent.horizontalCenter
        }

        Rectangle {
            height: parent.border.width * 0.7
            color: header.color
            anchors.top: parent.top
            anchors.topMargin: parent.height * 0.25
            anchors.left: parent.left
            anchors.leftMargin: 0
            anchors.right: parent.right
            anchors.rightMargin: 0
        }

        Text {
            id: pesoLabel
            text: qsTr("Aguarde...")
            font.pixelSize: parent.height * 0.5
            anchors.horizontalCenter: parent.horizontalCenter
            anchors.bottom: parent.bottom
            anchors.bottomMargin: parent.height * 0.1
        }
    }

    Grid {
        id: listaPanelas
        anchors.top: weightWindow.bottom
        anchors.topMargin: parent.height * 0.02
        anchors.bottom: paginador.top
        anchors.left: parent.left
        anchors.leftMargin: parent.width * 0.01
        anchors.right: parent.right
        columns: 3
        rows: 3
        spacing: parent.width * 0.01
    }

    Paginator {
        id: paginador
    }
}
